home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / ssl3prot.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  8KB  |  307 lines

  1. /* Private header file of libSSL.
  2.  * Various and sundry protocol constants. DON'T CHANGE THESE. These
  3.  * values are defined by the SSL 3.0 protocol specification.
  4.  *
  5.  * ***** BEGIN LICENSE BLOCK *****
  6.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  7.  *
  8.  * The contents of this file are subject to the Mozilla Public License Version
  9.  * 1.1 (the "License"); you may not use this file except in compliance with
  10.  * the License. You may obtain a copy of the License at
  11.  * http://www.mozilla.org/MPL/
  12.  *
  13.  * Software distributed under the License is distributed on an "AS IS" basis,
  14.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  15.  * for the specific language governing rights and limitations under the
  16.  * License.
  17.  *
  18.  * The Original Code is the Netscape security libraries.
  19.  *
  20.  * The Initial Developer of the Original Code is
  21.  * Netscape Communications Corporation.
  22.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  23.  * the Initial Developer. All Rights Reserved.
  24.  *
  25.  * Contributor(s):
  26.  *   Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
  27.  *
  28.  * Alternatively, the contents of this file may be used under the terms of
  29.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  30.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  31.  * in which case the provisions of the GPL or the LGPL are applicable instead
  32.  * of those above. If you wish to allow use of your version of this file only
  33.  * under the terms of either the GPL or the LGPL, and not to allow others to
  34.  * use your version of this file under the terms of the MPL, indicate your
  35.  * decision by deleting the provisions above and replace them with the notice
  36.  * and other provisions required by the GPL or the LGPL. If you do not delete
  37.  * the provisions above, a recipient may use your version of this file under
  38.  * the terms of any one of the MPL, the GPL or the LGPL.
  39.  *
  40.  * ***** END LICENSE BLOCK ***** */
  41. /* $Id: ssl3prot.h,v 1.10 2005/08/18 23:37:31 julien.pierre.bugs%sun.com Exp $ */
  42.  
  43. #ifndef __ssl3proto_h_
  44. #define __ssl3proto_h_
  45.  
  46. typedef uint8 SSL3Opaque;
  47.  
  48. typedef uint16 SSL3ProtocolVersion;
  49. /* version numbers are defined in sslproto.h */
  50.  
  51. typedef uint16 ssl3CipherSuite;
  52. /* The cipher suites are defined in sslproto.h */
  53.  
  54. #define MAX_CERT_TYPES            10
  55. #define MAX_COMPRESSION_METHODS        10
  56. #define MAX_MAC_LENGTH            64
  57. #define MAX_PADDING_LENGTH        64
  58. #define MAX_KEY_LENGTH            64
  59. #define EXPORT_KEY_LENGTH         5
  60. #define SSL3_RANDOM_LENGTH        32
  61.  
  62. #define SSL3_RECORD_HEADER_LENGTH     5
  63.  
  64. #define MAX_FRAGMENT_LENGTH        16384
  65.      
  66. typedef enum {
  67.     content_change_cipher_spec = 20, 
  68.     content_alert              = 21,
  69.     content_handshake          = 22, 
  70.     content_application_data   = 23
  71. } SSL3ContentType;
  72.  
  73. typedef struct {
  74.     SSL3ContentType     type;
  75.     SSL3ProtocolVersion version;
  76.     uint16              length;
  77.     SECItem             fragment;
  78. } SSL3Plaintext;
  79.  
  80. typedef struct {
  81.     SSL3ContentType     type;
  82.     SSL3ProtocolVersion version;
  83.     uint16              length;
  84.     SECItem             fragment;
  85. } SSL3Compressed;
  86.  
  87. typedef struct {
  88.     SECItem    content;
  89.     SSL3Opaque MAC[MAX_MAC_LENGTH];
  90. } SSL3GenericStreamCipher;
  91.  
  92. typedef struct {
  93.     SECItem    content;
  94.     SSL3Opaque MAC[MAX_MAC_LENGTH];
  95.     uint8      padding[MAX_PADDING_LENGTH];
  96.     uint8      padding_length;
  97. } SSL3GenericBlockCipher;
  98.  
  99. typedef enum { change_cipher_spec_choice = 1 } SSL3ChangeCipherSpecChoice;
  100.  
  101. typedef struct {
  102.     SSL3ChangeCipherSpecChoice choice;
  103. } SSL3ChangeCipherSpec;
  104.  
  105. typedef enum { alert_warning = 1, alert_fatal = 2 } SSL3AlertLevel;
  106.  
  107. typedef enum {
  108.     close_notify            = 0,
  109.     unexpected_message      = 10,
  110.     bad_record_mac          = 20,
  111.     decryption_failed       = 21,    /* TLS only */
  112.     record_overflow         = 22,    /* TLS only */
  113.     decompression_failure   = 30,
  114.     handshake_failure       = 40,
  115.     no_certificate          = 41,    /* SSL3 only, NOT TLS */
  116.     bad_certificate         = 42,
  117.     unsupported_certificate = 43,
  118.     certificate_revoked     = 44,
  119.     certificate_expired     = 45,
  120.     certificate_unknown     = 46,
  121.     illegal_parameter       = 47,
  122.  
  123. /* All alerts below are TLS only. */
  124.     unknown_ca              = 48,
  125.     access_denied           = 49,
  126.     decode_error            = 50,
  127.     decrypt_error           = 51,
  128.     export_restriction      = 60,
  129.     protocol_version        = 70,
  130.     insufficient_security   = 71,
  131.     internal_error          = 80,
  132.     user_canceled           = 90,
  133.     no_renegotiation        = 100
  134.  
  135. } SSL3AlertDescription;
  136.  
  137. typedef struct {
  138.     SSL3AlertLevel       level;
  139.     SSL3AlertDescription description;
  140. } SSL3Alert;
  141.  
  142. typedef enum {
  143.     hello_request    = 0, 
  144.     client_hello    = 1, 
  145.     server_hello    = 2,
  146.     certificate     = 11, 
  147.     server_key_exchange = 12,
  148.     certificate_request    = 13, 
  149.     server_hello_done    = 14,
  150.     certificate_verify    = 15, 
  151.     client_key_exchange    = 16, 
  152.     finished        = 20
  153. } SSL3HandshakeType;
  154.  
  155. typedef struct {
  156.     uint8 empty;
  157. } SSL3HelloRequest;
  158.      
  159. typedef struct {
  160.     SSL3Opaque rand[SSL3_RANDOM_LENGTH];
  161. } SSL3Random;
  162.      
  163. typedef struct {
  164.     SSL3Opaque id[32];
  165.     uint8 length;
  166. } SSL3SessionID;
  167.      
  168. typedef enum { compression_null = 0 } SSL3CompressionMethod;
  169.      
  170. typedef struct {
  171.     SSL3ProtocolVersion   client_version;
  172.     SSL3Random            random;
  173.     SSL3SessionID         session_id;
  174.     SECItem               cipher_suites;
  175.     uint8                 cm_count;
  176.     SSL3CompressionMethod compression_methods[MAX_COMPRESSION_METHODS];
  177. } SSL3ClientHello;
  178.      
  179. typedef struct  {
  180.     SSL3ProtocolVersion   server_version;
  181.     SSL3Random            random;
  182.     SSL3SessionID         session_id;
  183.     ssl3CipherSuite       cipher_suite;
  184.     SSL3CompressionMethod compression_method;
  185. } SSL3ServerHello;
  186.      
  187. typedef struct {
  188.     SECItem list;
  189. } SSL3Certificate;
  190.  
  191. /* SSL3SignType moved to ssl.h */
  192.  
  193. /* The SSL key exchange method used */     
  194. typedef enum {
  195.     kea_null, 
  196.     kea_rsa, 
  197.     kea_rsa_export,
  198.     kea_rsa_export_1024,
  199.     kea_dh_dss, 
  200.     kea_dh_dss_export, 
  201.     kea_dh_rsa, 
  202.     kea_dh_rsa_export,
  203.     kea_dhe_dss, 
  204.     kea_dhe_dss_export, 
  205.     kea_dhe_rsa, 
  206.     kea_dhe_rsa_export,
  207.     kea_dh_anon, 
  208.     kea_dh_anon_export, 
  209.     kea_rsa_fips,
  210.     kea_ecdh_ecdsa,
  211.     kea_ecdhe_ecdsa,
  212.     kea_ecdh_rsa,
  213.     kea_ecdhe_rsa
  214. } SSL3KeyExchangeAlgorithm;
  215.      
  216. typedef struct {
  217.     SECItem modulus;
  218.     SECItem exponent;
  219. } SSL3ServerRSAParams;
  220.  
  221. typedef struct {
  222.     SECItem p;
  223.     SECItem g;
  224.     SECItem Ys;
  225. } SSL3ServerDHParams;
  226.  
  227. typedef struct {
  228.     union {
  229.     SSL3ServerDHParams dh;
  230.     SSL3ServerRSAParams rsa;
  231.     } u;
  232. } SSL3ServerParams;
  233.  
  234. typedef struct {
  235.     uint8 md5[16];
  236.     uint8 sha[20];
  237. } SSL3Hashes;
  238.      
  239. typedef struct {
  240.     union {
  241.     SSL3Opaque anonymous;
  242.     SSL3Hashes certified;
  243.     } u;
  244. } SSL3ServerKeyExchange;
  245.      
  246. typedef enum {
  247.     ct_RSA_sign     =  1, 
  248.     ct_DSS_sign     =  2, 
  249.     ct_RSA_fixed_DH     =  3,
  250.     ct_DSS_fixed_DH     =  4, 
  251.     ct_RSA_ephemeral_DH =  5, 
  252.     ct_DSS_ephemeral_DH =  6,
  253.     /* XXX The numbers assigned to the following EC-based 
  254.      * certificate types might change before the ECC in TLS
  255.      * draft becomes an IETF RFC.
  256.      */
  257.     ct_ECDSA_sign    =  7, 
  258.     ct_RSA_fixed_ECDH    =  8, 
  259.     ct_ECDSA_fixed_ECDH    =  9 
  260.  
  261. } SSL3ClientCertificateType;
  262.      
  263. typedef SECItem *SSL3DistinquishedName;
  264.  
  265. typedef struct {
  266.     SSL3Opaque client_version[2];
  267.     SSL3Opaque random[46];
  268. } SSL3RSAPreMasterSecret;
  269.      
  270. typedef SECItem SSL3EncryptedPreMasterSecret;
  271.  
  272.  
  273. typedef SSL3Opaque SSL3MasterSecret[48];
  274.  
  275. typedef enum { implicit, explicit } SSL3PublicValueEncoding;
  276.      
  277. typedef struct {
  278.     union {
  279.     SSL3Opaque implicit;
  280.     SECItem    explicit;
  281.     } dh_public;
  282. } SSL3ClientDiffieHellmanPublic;
  283.      
  284. typedef struct {
  285.     union {
  286.     SSL3EncryptedPreMasterSecret  rsa;
  287.     SSL3ClientDiffieHellmanPublic diffie_helman;
  288.     } exchange_keys;
  289. } SSL3ClientKeyExchange;
  290.  
  291. typedef SSL3Hashes SSL3PreSignedCertificateVerify;
  292.  
  293. typedef SECItem SSL3CertificateVerify;
  294.  
  295. typedef enum {
  296.     sender_client = 0x434c4e54,
  297.     sender_server = 0x53525652
  298. } SSL3Sender;
  299.  
  300. typedef SSL3Hashes SSL3Finished;   
  301.  
  302. typedef struct {
  303.     SSL3Opaque verify_data[12];
  304. } TLSFinished;
  305.  
  306. #endif /* __ssl3proto_h_ */
  307.